﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;
using System.IO;

namespace Ahorcado
{
    public partial class Principal : Form
    {
        public Principal()
        {
            InitializeComponent();
            Nivel = 1;
            IniciarJuego(Nivel);
            Victorios = new int[4,2];
            cargarVictorias();
        }
        
        public string Frase { get; set; }
        public string FraseEnmascarada { get; set; }
        public int indice;
        public int Nivel { set; get; }
        public string Letras { get; set; }
        public int[,] Victorios { set; get; }

        public void IniciarJuego(int nivel)
        {            
            ReiniciarTeclas();
            pbImagen.BackgroundImage = imagenes.Images[0];
            SeleccionarPalabra(nivel);
            indice = 0;
            Letras = "";
            teclado1.SonidoHabilitado = true;
        }
        public void SeleccionarPalabra(int nivel)
        {
            string ruta ="";
            Frase = "Hola Mundo";
            foreach (ToolStripMenuItem imtes in categoriasToolStripMenuItem1.DropDownItems)
            {
                imtes.Checked = false;
            }
            switch (nivel)
            { 
                case 1:
                    frasesToolStripMenuItem.Checked = true;
                    ruta = "Palabras/Frases.ahorc";
                    break;
                case 2:
                    palindromosToolStripMenuItem.Checked = true;
                    ruta = "Palabras/palindromos.ahorc";
                    break;
                case 3:
                    localidadesToolStripMenuItem.Checked = true;
                    ruta = "Palabras/localidades.ahorc";
                    break;
                case 4:
                    platillosToolStripMenuItem.Checked = true;
                    ruta = "Palabras/platillos.ahorc";
                    break;
            }
            Frase = RecuperarPalabras(ruta);
            FraseEnmascarada = "";
            Frase = Frase.ToUpper();
            foreach (char let in Frase)
            {
                if (let == ' ')
                    FraseEnmascarada += ' ';
                else
                FraseEnmascarada += '-';
            }
            label1.Text = FraseEnmascarada;
        }
        public void Error()
        {
            if (indice < 6) {
                pbImagen.BackgroundImage = imagenes.Images[++indice];
                if (indice == 6)
                {
                    SoundPlayer sonido = new SoundPlayer("Sonidos/OUCH.wav");
                    teclado1.Enabled = false;
                    label1.Text = Frase;                    
                    teclado1.SonidoHabilitado = false;                   
                    sonido.Play();
                    MessageBox.Show("Pierdes!!");
                    Victorios[Nivel - 1, 1]++;
                }
            }
                
            
        }
        public bool Reemplazr(char letra)
        {
            string nuevafrase = "";
            if (Frase.ToUpper().Contains(letra))
            {
                for(int i=0; i < Frase.Length;i++)
                {
                    if (Frase.ToUpper()[i] == letra)
                        nuevafrase += letra;
                    else
                        nuevafrase += FraseEnmascarada[i];
                }
                FraseEnmascarada = nuevafrase;
                return true;
            }
            return false;
        }
        public void ReiniciarTeclas()
        {
            teclado1.Enabled = true;
            teclado1.HabilitarBotones();
        }
        public string RecuperarPalabras(string path)
        {
            string palabra = "";
            List<string> palaras= new List<string>();
            try
            {
                TextReader archivo = new StreamReader(path);
                while ((palabra = archivo.ReadLine()) != null)
                {
                    palaras.Add(palabra);
                }
                if (palaras.Count > 0)
                {
                    Random rnd = new Random();
                    palabra = palaras[rnd.Next(palaras.Count)];
                }
                else
                    palabra = "Hola Mundo";
            }
            catch (Exception)
            {
                return "Hola Mundo";
               
            }
            return palabra;
        }

        void cargarVictorias() {
            try
            {
                TextReader archivo = new StreamReader("hist.ahorc");                
                Victorios[0,0]  = int.Parse(archivo.ReadLine());
                Victorios[0, 1] = int.Parse(archivo.ReadLine());
                Victorios[1, 0] = int.Parse(archivo.ReadLine());
                Victorios[1, 1] = int.Parse(archivo.ReadLine());
                Victorios[2, 0] = int.Parse(archivo.ReadLine());
                Victorios[2, 1] = int.Parse(archivo.ReadLine());
                Victorios[3, 0] = int.Parse(archivo.ReadLine());
                Victorios[3, 1] = int.Parse(archivo.ReadLine());
                archivo.Close();
            }
            catch (Exception)
            {

                MessageBox.Show("Problemas cargando el historial");
            }
        }
        void guardarVictorias()
        {
            try
            {
                TextWriter archivo = new StreamWriter("hist.ahorc");
                archivo.WriteLine(Victorios[0, 0]);
                archivo.WriteLine(Victorios[0, 1]);
                archivo.WriteLine(Victorios[1, 0]);
                archivo.WriteLine(Victorios[1, 1]);
                archivo.WriteLine(Victorios[2, 0]);
                archivo.WriteLine(Victorios[2, 1]);
                archivo.WriteLine(Victorios[3, 0]);
                archivo.WriteLine(Victorios[3, 1]);
                
                archivo.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("Problemas guardando el historial");
            }
        }

        private void teclado1_TeclaPresionada(object sender, TecladoEventArgs e)
        {
            SoundPlayer sonido;
            Letras += e.Tecla;
            if (Reemplazr(e.Tecla))
            {
                label1.Text = FraseEnmascarada;
                if (Frase == FraseEnmascarada)
                {
                    teclado1.Enabled = false;
                    teclado1.SonidoHabilitado = false;
                    sonido = new SoundPlayer("Sonidos/win.wav");
                    sonido.Play();
                    MessageBox.Show("Tu Ganas!!");
                    Victorios[Nivel - 1, 0]++;
                    Victorios[Nivel - 1, 1]++;
                }
            }
            else {
                Error();
            }
        }

        //Juego nuevo
        private void nuevoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IniciarJuego(Nivel);
        }

        private void salirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            this.Close();
        }

        private void cargarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                TextReader archivo = new StreamReader("SavedGame.ahorc");
                Frase = archivo.ReadLine();
                FraseEnmascarada = archivo.ReadLine();
                indice = int.Parse(archivo.ReadLine());
                Nivel = int.Parse(archivo.ReadLine());
                Letras = archivo.ReadLine();
                label1.Text = FraseEnmascarada;
                pbImagen.BackgroundImage = imagenes.Images[indice];
                teclado1.Bloquear(Letras);
                foreach (ToolStripMenuItem imtes in categoriasToolStripMenuItem1.DropDownItems)
                {
                    imtes.Checked = false;
                }
                switch (Nivel)
                {
                    case 1:
                        frasesToolStripMenuItem.Checked = true;
                        break;
                    case 2:
                        palindromosToolStripMenuItem.Checked = true;
                        
                        break;
                    case 3:
                        localidadesToolStripMenuItem.Checked = true;
                        
                        break;
                    case 4:
                        platillosToolStripMenuItem.Checked = true;
                      
                        break;
                }
            }
            catch (Exception)
            {
                IniciarJuego(Nivel);
                MessageBox.Show("El juego no se cargo correctamente");
            }
            MessageBox.Show("El juego se cargó correctamente");
        }

        private void guardarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                TextWriter archivo = new StreamWriter("SavedGame.ahorc");
                archivo.WriteLine(Frase);
                archivo.WriteLine(FraseEnmascarada);
                archivo.WriteLine(indice);
                archivo.WriteLine(Nivel);
                archivo.WriteLine(Letras);
                archivo.Close();
            }
            catch (Exception)
            {

                MessageBox.Show("El juego no se pudo guardar");
            }
            MessageBox.Show("El juego se guardó correctamente");
        }

        private void frasesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem item = sender as ToolStripMenuItem;
            foreach(ToolStripMenuItem imtes in categoriasToolStripMenuItem1.DropDownItems)
            {
                imtes.Checked = false;
            }
            switch (item.Name.ToUpper().Substring(0, 3))
            { 
                case "FRA":
                    Nivel = 1;
                    frasesToolStripMenuItem.Checked = true;
                    break;
                case "LOC":
                    Nivel = 3;
                    localidadesToolStripMenuItem.Checked = true;
                    break;
                case "PAL":
                    Nivel = 2;
                    palindromosToolStripMenuItem.Checked = true;
                    break;
                case "PLA":
                    Nivel = 3;
                    platillosToolStripMenuItem.Checked = true;
                    break;
            }
            IniciarJuego(Nivel);
        }

        private void Principal_Load(object sender, EventArgs e)
        {
           
        }

        private void Principal_FormClosing(object sender, FormClosingEventArgs e)
        {
            guardarVictorias();
        }

        private void estadisticasToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string estadisticas ="";
            estadisticas += "Indice de victorias: \n";
            estadisticas += string.Format("Frases celebres:    {0}/{1}\n",Victorios[0,0],Victorios[0,1]);
            estadisticas += string.Format("Palindromos:    {0}/{1}\n", Victorios[1, 0], Victorios[1, 1]);
            estadisticas += string.Format("Localidades:    {0}/{1}\n", Victorios[2, 0], Victorios[2, 1]);
            estadisticas += string.Format("Platillos:    {0}/{1}\n", Victorios[3, 0], Victorios[3, 1]);
            MessageBox.Show(estadisticas);
        }
        



    }
}
